通过滑块 (Slider) 节点,可以让用户使用视觉指示器在最小值与最大值之间更改数值。 当您沿生成消息的轨迹移动旋钮时:拖动开始、拖动完成、值已更改。
要了解如何创建滑块,请完成滑块教程。请参阅教程:创建滑块。
滑块 (Slider) 节点有焦点时,使用:
要使用键盘键移动滑块旋钮,需在属性 (Properties) 中设置该滑块的步进值 (Step Value) 属性,定义每次按下键时旋钮移动多少步。
要创建滑块:
最大值 (Maximum Value) 定义滑块的最高值。
最小值 (Minimum Value) 定义滑块的最低值。
步进值 (Step Value) 定义旋钮在导轨上移动的增量。
值 (Value) 属性设置旋钮在导轨上的初始位置。如果未设置最小值 (Minimum Value) 和最大值 (Maximum Value) 属性,则范围在 0 和 1 之间。
当 Kanzi 随附的滑块不符合您的要求时,您可以创建自己的滑块。
要创建您自己的滑块:
轨迹布局的轨迹用作沿其移动滑块旋钮的轨道。Kanzi Studio 默认创建并使用圆形轨迹。您可以使用角度、弧形、圆形、椭圆、直线、矩形、螺旋、样条或梯形轨迹。请参阅轨迹。
{../../RangeConcept.NormalizedValue}
点击保存 (Save)。请参阅使用绑定。
最大值 (Maximum Value) 定义滑块的最高值。
最小值 (Minimum Value) 定义滑块的最低值。
步进值 (Step Value) 定义旋钮在导轨上移动的增量。
值 (Value) 属性设置旋钮在导轨上的初始位置。如果未设置最小值 (Minimum Value) 和最大值 (Maximum Value) 属性,则范围在 0 和 1 之间。
要设置 2D 节点的外观:
要创建具有自定义外观的 3D 滑块节点:
//创建一个名为 Custom 3D slider 的 3D 滑块节点。 Slider3DSharedPtr slider3d = Slider3D::create(domain, "Custom 3D slider"); //将 3D 滑块节点添加到场景节点中。 scene->addChild(slider3d); //将 3D 滑块节点的大小设置为 4 个设备无关单位宽、 //2 个设备无关单位高和 1 个设备无关单位深。 slider3d->setWidth(4.0f); slider3d->setHeight(2.0f); slider3d->setDepth(1.0f); //使用 3D 轨迹布局节点定义滑块的旋钮要沿哪个轨道移动。 //创建一个名为 Slider rail 的 3D 轨迹布局节点。 TrajectoryLayout3DSharedPtr trajectoryLayout = TrajectoryLayout3D::create(domain, "Slider rail"); //使用球体节点定义沿滑块轨道移动的旋钮的外观。 //创建一个名为 Slider knob 且其半径为 1 个设备无关单位的蓝色球体节点。 Model3DSharedPtr sliderKnob = Model3D::createSphere(domain, "Slider knob", 1.0f, 20, 20, ThemeBlue); //将球体节点设置为 trajectoryLayout 3D 轨迹布局节点的子对象。 trajectoryLayout->addChild(sliderKnob); //将布局添加为 2D 滑块节点的子节点。 //您可以将用于定义轨道的 2D 轨迹布局节点放在 //场景图中的任意位置,而且它不必是 3D 滑块节点的直接子对象。 slider3d->addChild(trajectoryLayout); //旋钮在轨道上的移动基于对 TrajectoryLayout3D::StaticTrajectoryOffsetProperty 属性进行的修改, //而属性是根据 Slider3D::ValueProperty 属性而设置的。 // "../.." 是旋钮(球体节点)到 3D 滑块节点的路径。 BindingSharedPtr binding = Binding::create(domain, "../..", Slider3D::ValueProperty, PropertyFieldWhole, TrajectoryLayout3D::OverrideOffsetProperty, PropertyFieldWhole); //将绑定添加到节点,绑定使旋钮能够在轨道上移动。 sliderKnob->addBinding(binding); //创建一个别名并使其指向用于定义滑块轨道的 3D 轨迹布局节点。 ResourceID alias("$layout"); string path("obj:///" + trajectoryLayout->getName()); //将别名添加到滑块 3D 节点的资源字典中。 slider3d->addResource(alias, path); //创建 3D 轨迹布局节点的轨迹,轨迹将用作 3D 滑块节点的轨道。 //在 x 轴上创建一个直线轨迹,其长度 5 个设备无关单位,名称为 Line trajectory。 TrajectorySharedPtr trajectory = Trajectory::createLine(Vector3(), Vector3(1.0f, 0.0f, 0.0f), 5.0f, domain, "Line trajectory"); //设置轨迹布局 3D 节点,以使用直线轨迹。 trajectoryLayout->setTrajectory(trajectory); //设置轨迹布局 3D 节点,以使其根据父节点 //(在本例中为滑块 3D 节点)的大小设置自己的大小。 trajectoryLayout->setHorizontalAlignment(Node::HorizontalAlignmentStretch); trajectoryLayout->setVerticalAlignment(Node::VerticalAlignmentStretch); trajectoryLayout->setDepthAlignment(Node::DepthAlignmentStretch);
有关详细信息,请参阅 API reference中的 Slider3D
类。
要创建具有自定义外观的 2D 滑块节点:
//创建一个名为 Custom 2D slider 的 2D 滑块节点。 Slider2DSharedPtr slider = Slider2D::create(domain, "Custom 2D slider"); //将 2D 滑块节点的大小设置为 400 像素宽、200 像素高。 slider->setSize(400.0f, 200.0f); //使用 2D 轨迹布局节点定义滑块的旋钮要沿哪个轨道移动。 //创建一个名为 Slider rail 的 2D 轨迹布局节点。 TrajectoryLayout2DSharedPtr trajectoryLayout = TrajectoryLayout2D::create(domain, "Slider rail"); //使用图像节点定义沿滑块轨道移动的旋钮的外观。 //创建一个名为 Slider knob 的图像节点。 Image2DSharedPtr knob = Image2D::create(domain, "Slider knob"); //将图像节点设置为 trajectoryLayout 2D 轨迹布局节点的子对象。 trajectoryLayout->addChild(knob); //创建一个别名并使其指向用于定义滑块轨道的 2D 轨迹布局节点。 ResourceID alias("$layout"); string path("obj:///" + trajectoryLayout->getName()); //将别名添加到 2D 滑块节点的资源字典中。 slider->addResource(alias, path); //将布局添加为 2D 滑块节点的子节点。 //您可以将用于定义轨道的 2D 轨迹布局节点放在 //场景图中的任意位置,而且它不必是 2D 滑块节点的直接子对象。 slider->addChild(trajectoryLayout); //创建 2D 轨迹布局节点的轨迹,轨迹将用作 2D 滑块节点的轨道。 //在 x 轴上创建一个直线轨迹,长度为 350 像素,名称为 Line trajectory。 TrajectorySharedPtr trajectory = Trajectory::createLine(Vector3(), Vector3(1.0f, 0.0f, 0.0f), 350.0f, domain, "Line trajectory"); //设置 2D 轨迹布局节点,以使用直线轨迹。 trajectoryLayout->setTrajectory(trajectory); //设置 2D 轨迹布局节点,以使其根据父节点 //(在本例中为 2D 滑块节点)的大小设置自己的大小。 trajectoryLayout->setHorizontalAlignment(Node::HorizontalAlignmentStretch); trajectoryLayout->setVerticalAlignment(Node::VerticalAlignmentStretch); //旋钮在轨道上的移动基于对 TrajectoryLayout2D::StaticTrajectoryOffsetProperty 属性进行的修改, //而属性是根据 Slider2D::ValueProperty 属性而设置的。 // "../.." 是旋钮(图像节点)到 2D 滑块节点的路径。 BindingSharedPtr binding = Binding::create(domain, "../..", Slider2D::ValueProperty, PropertyFieldWhole, TrajectoryLayout2D::OverrideOffsetProperty, PropertyFieldWhole); //将 2D 滑块节点添加到 2D 视口节点。 viewportNode->addChild(slider); //从预设件模板的实例获取旋钮实例。 Node2DSharedPtr knobInstance = slider->getPresenter()->getLayout()->getChild(0); //将绑定添加到节点,绑定使旋钮能够在轨道上移动。 knobInstance->addBinding(binding);
有关详细信息,请参阅 API reference中的 Slider2D
类。
要查看 滑块 (Slider) 节点可用属性类型和消息的完整列表,请参阅 Slider 2D和 Slider 3D。